package br.edu.ifrs.restinga;

import br.edu.ifrs.util.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * [x]Declarar atributos [x]Encapsular atributos [x]Declarar método construtor
 * [x]Declarar métodos [N/A]Declarar herança [x]Declarar relacionamento Filme
 * tem elencendo (1..*) Filme tem diretor geral (1)
 */
/**
 *
 * @author ifrs-restinga
 * @author drum
 */
public class Filme {

    private String titulo;
    private String categoria;
    private String sinopse;
    private String nacionalidade;
    private int duracao;
    private int ano;
    private int codigo;
    //Relacionamento
    private DiretorGeral diretor;
    private List<Elenco> elenco;
    /*
     cli = new Cliente();
     imp = new ArrayList();            */

    public Filme() {
        titulo = "";
        categoria = "";
        sinopse = "";
        nacionalidade = "";
        duracao = 0;
        ano = 0;
        //relacionamento
        diretor = new DiretorGeral();
        elenco = new ArrayList();
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public String getSinopse() {
        return sinopse;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public String getNacionalidade() {
        return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    public int getDuracao() {
        return duracao;
    }

    public void setDuracao(int duracao) {
        this.duracao = duracao;
    }

    public int getAno() {
        return ano;
    }

    public void setAno(int ano) {
        this.ano = ano;
    }

    /**
     * @return the diretor
     */
    public DiretorGeral getDiretor() {
        return diretor;
    }

    /**
     * @param diretor the diretor to set
     */
    public void setDiretor(DiretorGeral diretor) {
        this.diretor = diretor;
    }

    /**
     * @return the elenco
     */
    public List<Elenco> getElenco() {
        return elenco;
    }

    /**
     * @param elenco the elenco to set
     */
    public void setElenco(List<Elenco> elenco) {
        this.elenco = elenco;
    }

    public void Cadastrar() {
        Scanner s;
        s = new Scanner(System.in);

        System.out.println("      DADOS DO FILME");
        System.out.println("      --------------");

        System.out.print("Digite o titulo do filme: ");
        titulo = s.next();

        System.out.print("Digite a categoria do filme: ");
        categoria = s.next();

        System.out.print("Digite a sinopse do filme: ");
        s.nextLine();
        sinopse = s.nextLine();

        System.out.print("Digite a nacionalide do filme: ");
        nacionalidade = s.next();

        System.out.print("Digite a duracao (em minutos) do filme : ");
        duracao = s.nextInt();

        System.out.print("Digite o ano do filme : ");
        ano = s.nextInt();

        Inserir(); //joga os dados das variáveis do filme no banco

        System.out.println("      DADOS DO DIRETOR GERAL DO FILME");
        System.out.println("      -------------------------------");
        getDiretor().Cadastrar();//joga os dados do usuario nas variáveis
        getDiretor().Inserir();//joga das variaveis para o banco

        System.out.println("      \nDADOS DO ELENCO DO FILME");
        System.out.println("      ------------------------");

        int opcao = 0;

        while (opcao != 2) {
            Elenco aux;
            aux = new Elenco();
            aux.Cadastrar();
            getElenco().add(aux);//joga os dados do usuario nas variaveis
            aux.Inserir();//joga das variaveis para o banco

            System.out.println("\nDeseja inserir outra Pessoa do elenco?");
            System.out.print("(1)-Sim     (2)-Nao: ");
            opcao = s.nextInt();
        }//while

    }//cadastrar

    public void Inserir() {
        try {
            Connection con = Conexao.abrirConexao();

            PreparedStatement pstmt;
            pstmt = con.prepareStatement("insert into filmes (titulo, categoria, sinopse, nacionalidade, duracao, ano) values (?, ?, ?, ?, ?, ?)");
            pstmt.setString(1, titulo);
            pstmt.setString(2, categoria);
            pstmt.setString(3, sinopse);
            pstmt.setString(4, nacionalidade);
            pstmt.setInt(5, duracao);
            pstmt.setInt(6, ano);

            pstmt.execute();

            pstmt.close();
            con.close();
        }/*try*/ catch (Exception e) {
            System.out.println(e.toString());
        }//catch
    }//inserir

    public void AtualizarDados() {
        Scanner s = new Scanner(System.in);
        Consultar();
        int alt;

        System.out.println("Titulo do filme: " + titulo);
        System.out.println("Deseja alterar? (1-Sim/0-Não)");
        alt = s.nextInt();
        if (alt == 1) {
            System.out.print("Digite a atualização: ");
            titulo = s.next();
        }

        System.out.println("Categoria do filme: " + categoria);
        System.out.println("Deseja alterar? (1-Sim/0-Não)");
        alt = s.nextInt();
        if (alt == 1) {
            System.out.print("Digite a atualização: ");
            categoria = s.next();
        }

        System.out.println("sinopse do filme: " + sinopse);
        System.out.println("Deseja alterar? (1-Sim/0-Não)");
        alt = s.nextInt();
        if (alt == 1) {
            System.out.print("Digite a atualização: ");
            s.nextLine();
            sinopse = s.nextLine();
        }

        System.out.println("Nacionalidade do filme: " + nacionalidade);
        System.out.println("Deseja alterar? (1-Sim/0-Não)");
        alt = s.nextInt();
        if (alt == 1) {
            System.out.print("Digite a atualização: ");
            s.nextLine();
            nacionalidade = s.nextLine();
        }

        System.out.println("Duracao do filme: " + duracao);
        System.out.println("Deseja alterar? (1-Sim/0-Não)");
        alt = s.nextInt();
        if (alt == 1) {
            System.out.print("Digite a atualização: ");
            duracao = s.nextInt();
        }

        System.out.println("Ano do filme: " + ano);
        System.out.println("Deseja alterar? (1-Sim/0-Não)");
        alt = s.nextInt();
        if (alt == 1) {
            System.out.print("Digite a atualização: ");
            ano = s.nextInt();
        }

    }//atualizardados

    public void AtualizarBanco() {

        try {
            Connection con = Conexao.abrirConexao();

            PreparedStatement pstmt;
            pstmt = con.prepareStatement("update filmes set titulo = ?, categoria = ?, sinopse = ?, nacionalidade = ?, duracao = ?, ano = ? where codigoFilme = ?");
            pstmt.setString(1, titulo);
            pstmt.setString(2, categoria);
            pstmt.setString(3, sinopse);
            pstmt.setString(4, nacionalidade);
            pstmt.setInt(5, duracao);
            pstmt.setInt(6, ano);
            pstmt.setInt(7, codigo);



            pstmt.execute();

            pstmt.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.toString());
        }

    }

    public void Consultar() {
        try {
            Connection con = Conexao.abrirConexao();

            Scanner s;
            s = new Scanner(System.in);

            System.out.print("Digite o codigo do filme: ");
            codigo = s.nextInt();

            PreparedStatement pstmt;
            pstmt = con.prepareStatement("select * from filmes where codigoFilme = ?");
            pstmt.setInt(1, codigo);

            ResultSet rs;
            rs = pstmt.executeQuery();

            if (rs.next() == true) {
                titulo = rs.getString("titulo");
                categoria = rs.getString("categoria");
                sinopse = rs.getString("sinopse");
                nacionalidade = rs.getString("nacionalidade");
                duracao = rs.getInt("duracao");
                ano = rs.getInt("ano");
            }

            rs.close();
            pstmt.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.toString());
        }

    }//consultar

    public void Excluir() {
          try {
            Connection con = Conexao.abrirConexao();
            
            PreparedStatement pstmt;
            pstmt = con.prepareStatement("delete from filmes where codigoFilme = ?");
            pstmt.setInt(1, codigo);
            
            pstmt.execute();
            
            pstmt.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }//excluir

     public void informarCodigo() {
        Scanner s;
        s = new Scanner(System.in);

        System.out.print("Digite o código: ");
        codigo = s.nextInt();
    }

}
